#ifndef IO_DRIVER_H
#define IO_DRIVER_H

#include <stm8s.h>
#include "uln.h"

// -------------------------- 硬件平台选择 --------------------------
// 根据实际使用的硬件平台取消注释相应的定义


// 默认通用定义


// 延时函数声明（需在对应C文件中实现）
void DELAY_US(uint32_t us);
void DELAY_MS(uint32_t ms);

 typedef int IO_Pin_TypeDef;

void IO_SET(const IO_Pin_TypeDef pin);
void IO_RESET(const IO_Pin_TypeDef pin);
#define IO_CONTROL(pin,status) {status?IO_SET(pin):IO_RESET(pin);}
int IO_READ(const IO_Pin_TypeDef pin);
// -------------------------- 输出引脚定义 --------------------------
// 顶料控制引脚
extern const IO_Pin_TypeDef Y0_PIN;  // 顶料1控制
extern const IO_Pin_TypeDef Y1_PIN;  // 顶料2控制
extern const IO_Pin_TypeDef Y2_PIN;  // 顶料3控制
extern const IO_Pin_TypeDef TOPPING_PIN[3];
// 果酱控制引脚
extern const IO_Pin_TypeDef Y3_PIN;  // 果酱1控制
extern const IO_Pin_TypeDef Y4_PIN;  // 果酱2控制
extern const IO_Pin_TypeDef Y5_PIN;  // 果酱3控制
extern const IO_Pin_TypeDef JAM_PIN[3];
// 落杯电机控制引脚
extern const IO_Pin_TypeDef Y6_PIN;  // 落杯电机控制

// 膨化泵控制引脚
extern const IO_Pin_TypeDef Y8_PIN;  // 膨化泵控制

// 主压机控制引脚
extern const IO_Pin_TypeDef Y14_PIN;  // 主压机控制

// 主电机控制引脚
extern const IO_Pin_TypeDef Y15_PIN;  // 主电机控制

// 电磁阀控制引脚
extern const IO_Pin_TypeDef Y16_PIN;  // 预冷电磁阀控制
extern const IO_Pin_TypeDef Y17_PIN;  // 制冷电磁阀控制
extern const IO_Pin_TypeDef Y19_PIN;  // 制热电磁阀控制

// 杀菌灯控制引脚
extern const IO_Pin_TypeDef Y21_PIN;  // 杀菌灯控制

// X轴步进电机控制引脚
extern const IO_Pin_TypeDef X_DIR_PIN;  // X轴方向正向
extern const IO_Pin_TypeDef X_PUL_PIN;  // X轴脉冲正向

// Y轴步进电机控制引脚
extern const IO_Pin_TypeDef Y_DIR_PIN;  // Y轴方向正向
extern const IO_Pin_TypeDef Y_PUL_PIN;  // Y轴脉冲正向

// Z轴步进电机控制引脚
extern const IO_Pin_TypeDef Z_DIR_PIN;  // Z轴方向正向
extern const IO_Pin_TypeDef Z_PUL_PIN;  // Z轴脉冲正向

// 提升电机控制引脚
extern const IO_Pin_TypeDef LIFT_PLUS_PIN;   // 提升电机上升
extern const IO_Pin_TypeDef LIFT_MINUS_PIN;  // 提升电机下降

// 电动门机控制引脚
extern const IO_Pin_TypeDef DOOR_PLUS_PIN;   // 电动门开门
extern const IO_Pin_TypeDef DOOR_MINUS_PIN;  // 电动门关门


// -------------------------- 输入引脚定义 --------------------------
// 原点信号引脚
extern const IO_Pin_TypeDef X0_PIN;  // X轴原点
extern const IO_Pin_TypeDef X1_PIN;  // Z轴原点

// 位置检测引脚
extern const IO_Pin_TypeDef X4_PIN;  // 落杯1位置
extern const IO_Pin_TypeDef X7_PIN;  // 杯子检测
extern const IO_Pin_TypeDef X9_PIN;  // 浮球欠料
extern const IO_Pin_TypeDef X11_PIN; // 对射信号
extern const IO_Pin_TypeDef X12_PIN; // 夹手开关


// -------------------------- 其他宏定义 --------------------------
#define MAX_HOMING_ATTEMPTS 3       // 原点回归最大尝试次数
#define MAX_HOMING_PULSES   10000   // 原点回归最大脉冲数
void io_driver_init(void);
#endif // IO_DRIVER_H
    